package cms.business;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import cms.hibernate.dao.CMSDAO;
import cms.hibernate.po.Article;
import cms.hibernate.po.Category;


public class CMSBusiness {
	public Logger logger = Logger.getLogger(this.getClass());
	CMSDAO dao=new CMSDAO();
////////////////////////////////////////////////////////////////
	/*
	 * 文章管理
	 */
	///////////////////////////////////////////////////////////////
	/*
	 * 获取指定文章
	 * @param id 文章id
	 */
	public Article getArticleById(int id)
	{
		return dao.getArticleById(id);
	}
	
	/*
	 * 保存文章
	 * @param article
	 * publishTime 发布时间，若为空，则以系统当前时间为准，时间格式为yyyy-MM-dd HH:mm:ss
	 * publishState 发布状态 ，0为草稿 ，1为发布 ，非1 值为草稿
	 */
	public boolean saveArticle(Article article)
	{
		if(article.getTitle()==null||article.getTitle().equals(""))//文章标题必填
		{
			logger.error("article title can not be blank!");
			return false;
		}
		
		if(article.getCategoryId()==null||article.getCategoryId().equals(0))
		{
			logger.error("article category id can not be blank!");
			return false;
		}
		
		Category ca = this.getCategoryById(article.getCategoryId());
		article.setCategoryName(ca.getCategoryName());
		
		if(article.getPublishState() ==null || article.getPublishState()!=1)//发布状态非1均设为0
			article.setPublishState(0);
		
		if(article.getPublishTime()==null||article.getPublishTime().trim().equals(""))//发布时间为空则以系统时间为准
		{
			Date date = new Date(); 
			try{
			   SimpleDateFormat DF = new SimpleDateFormat("yyyy-MM-dd");
			   article.setPublishTime(DF.format(date));
			}
			catch(Exception e)
			{
				//TODO
			}
			
		}
System.out.println(article.getTitle()+"," + article.getContent()+"," + article.getExcerpt());		
		return dao.saveOrupdate(article);
	}
	/*
	 * 删除文章 
	 * @param article  待删除文章对象
	 */
	public boolean deleteArticle(Article article)
	{
		return dao.delete(article);
	}
	/*
	 * 删除文章 
	 * @param id 待删除文章id
	 */
	public boolean deleteArticleById(int id)
	{
		return dao.delete(Article.class,id);
	}
	/*
	 * 批量删除文章 
	 * @param idArray  待删除文章id数组
	 */
	public boolean deleteArticleBatch(Integer[] idArray)
	{
		return dao.batchDelete(Article.class, idArray);
	}
	/*
	 * 获取所有文章
	 */
	public List getAllArticle()
	{
		return dao.getList(Article.class.getName());
	}
	/*
	 * 按页获取文章列表
	 * @param pageNO ,页码
	 * @param pageSize,每页数目
	 * @param authorId,作者id
	 */
	public List getArticleList(int pageNO,int pageSize,int authorId)
	{
		List result=null;
		String strhql=" from Article as a where a.authorId="+authorId;
		result=dao.query(pageNO, pageSize, strhql);
		return result;
	}
	
	public int getArticleCount() {
		return dao.getTotalCount("from Article");
	}
	
	/*
	 * 获取文章列表
	 * @param pageNO ,页码
	 * @param pageSize,每页数目
	 */
	public List getArticleList(int pageNO,int pageSize)
	{
		List result=null;
		String strhql=" from Article ";
		result=dao.query(pageNO, pageSize, strhql);
		return result;
	}
	/////////////////////////////////////////////////////
	/*
	 * 文章分类管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 获取文章分类
	 * @param id  文章分类id
	 */
	public Category getCategoryById(int id)
	{		
		return dao.getCategoryById(id);
	}
	/*
	 * 保存文章分类
	 * @param categoryId 文章分类id,若id为空则表示新建分类
	 * @param categoryName 文章分类名字
	 * @param parentId  父分类id
	 * 
	 */	
	public boolean saveCategory(Integer categoryId,String categoryName,Integer parentId)
	{
		Category category=null;
		if(categoryId==null||categoryId.equals(0))
		{
			category=new Category();
		}
		else
		{
			category=this.getCategoryById(categoryId);
		}
		if(category==null)
		{
			logger.error("create category failed!");
			return false;
		}
		if(categoryName==null||categoryName.equals(""))
		{
			logger.error("category name can not be blank!");
			return false;
		}
		category.setId(categoryId);
		category.setCategoryName(categoryName);
		category.setParentId(parentId);
		return dao.saveOrupdate(category);
	}
	/*
	 * 保存文章分类
	 */
	public boolean SaveCategory(Category category)
	{
		if(category==null)
		{
			logger.error("create category failed!");
			return false;
		}
		if(category.getCategoryName()==null||category.getCategoryName().equals(""))
		{
			logger.error("category name can not be blank!");
			return false;
		}		
		return dao.saveOrupdate(category);
	}
	/*
	 * 删除文章分类
	 * @param category 文章分类对象
	 */
	public boolean deleteCategory(Category category)
	{
		return dao.delete(category);
	}
	/*
	 * 删除文章分类
	 * @param id  文章分类id
	 */
	public boolean deleteCategoryById(Integer id)
	{
		List list = this.getCategoryList(id);
		if(list.size() > 0) {
			return false;
		}
			 
		return dao.delete(Category.class, id);
	}
	/*
	 * 批量删除文章分类
	 * @param idArray  待删除文章分类id数组
	 */
	public boolean deleteCategoryBatch(Integer[] idArray)
	{
		return dao.batchDelete(Category.class, idArray);
	}
	/*
	 * 获取所有文章分类
	 * 
	 */
	public List getAllCategory()
	{
		return dao.getList(Category.class.getName());
	}
	
	/**
	 * 取得分类List
	 * 
	 * @param id 当id为-1时，查询第一级的分类，否则查询第二级分类
	 * 
	 * parentId为-1代表第一级类别
	 * @return List
	 */
	public List getCategoryList(int parentId) {
		return dao.find("from Category c where c.parentId=?", parentId);
	}
	
	public List getCategoryChirldList() {
		return dao.find("from Category c ");
	}
	
	/*
	 * 根据文章分类名称获取分类，分页查找
	 * @param categoryName  查找分类名称，模糊查找
	 * @param pageNO 页码
	 * @param pageSize 每页的数目
	 */
	public List getCategoryByName(String categoryName,int pageNO,int pageSize)
	{
		List result=null;
		String strhql=" from Category as a where a.categoryName like '%"+categoryName+"%'";
		result=dao.query(pageNO, pageSize, strhql);
		return result;
	}
	/*
	 * 根据文章分类名称获取分类，查找所有结果
	 * @param categoryName 文章分类名
	 */
	public List getCategoryByName(String categoryName)
	{
		List result=null;
		String strhql=" from Category as a where a.categoryName like '%"+categoryName+"%'";
		result=dao.find(strhql);
		return result;
	}
}
